package com.demo.java.OD401_450.OD404;

import java.util.Scanner;

/**
 * @author bug菌
 * @Source 公众号：猿圈奇妙屋
 * @des： 【最长连续手牌(C&D卷)】问题
 * @url： https://blog.csdn.net/weixin_43970743/article/details/146251551
 */
public class OdMain {
    // 用于记录最大路径长度
    static int ans = 0;

    public static void main(String[] args) {
        // 创建输入扫描器
        Scanner scanner = new Scanner(System.in);

        // 读取数字和颜色字符串
        String[] nums = scanner.nextLine().split(" ");
        String[] colors = scanner.nextLine().split(" ");

        // 获取色块的数量
        int n = colors.length;

        // 创建一个数组来记录每个色块是否已被使用
        boolean[] used = new boolean[n];

        // 对每个色块进行深度优先搜索
        for (int i = 0; i < n; i++) {
            used[i] = true;  // 标记当前色块为已使用
            dfs(colors[i], nums[i], 1, n, colors, nums, used);  // 从当前色块开始深度优先搜索
            used[i] = false;  // 递归完成后撤销标记
        }

        // 输出结果：最大连通子序列的长度
        System.out.println(ans);
    }

    // 深度优先搜索函数
    public static void dfs(String curColor, String curNum, int pathLen, int n, String[] colors, String[] nums, boolean[] used) {
        // 更新最大路径长度
        ans = Math.max(pathLen, ans);

        // 遍历所有色块，寻找可以继续连通的色块
        for (int i = 0; i < n; i++) {
            // 如果当前色块已被访问，则跳过
            if (used[i]) {
                continue;
            }

            // 如果颜色或数字匹配，则可以连通
            if (curColor.equals(colors[i]) || curNum.equals(nums[i])) {
                used[i] = true;  // 标记当前色块为已使用

                // 递归调用，继续从当前色块出发探索
                dfs(colors[i], nums[i], pathLen + 1, n, colors, nums, used);

                used[i] = false;  // 递归完成后撤销标记，回溯
            }
        }
    }
}
